]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Don't track the status of the screensaver on DBus
authorGiovanni Campagna <gcampagna@src.gnome.org>
Tue, 22 May 2012 21:24:32 +0000 (23:24 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Sat, 21 Jul 2012 13:40:28 +0000 (15:40 +0200)
We are the screensaver now, and internal objects can track the
locking status better themselves. And to do so, add two signals
to ScreenShield.

https://bugzilla.gnome.org/show_bug.cgi?id=619955

js/Makefile.am
js/misc/screenSaver.js [deleted file]
js/ui/automountManager.js
js/ui/layout.js
js/ui/userMenu.js

index cf2353c81f52dc57293041fff8941c8ab31a9c56..97d95a9e805353616a5d19764b71a3d106921966 100644 (file)
@@ -32,7 +32,6 @@ nobase_dist_js_DATA =         \
        misc/jsParse.js         \
        misc/modemManager.js    \
        misc/params.js          \
-       misc/screenSaver.js     \
        misc/util.js            \
        perf/core.js            \
        ui/altTab.js            \
diff --git a/js/misc/screenSaver.js b/js/misc/screenSaver.js
deleted file mode 100644 (file)
index 87687e1..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
-
-const Gio = imports.gi.Gio;
-const Lang = imports.lang;
-
-const ScreenSaverIface = <interface name="org.gnome.ScreenSaver">
-<method name="GetActive">
-    <arg type="b" direction="out" />
-</method>
-<method name="Lock" />
-<method name="SetActive">
-    <arg type="b" direction="in" />
-</method>
-<signal name="ActiveChanged">
-    <arg type="b" direction="out" />
-</signal>
-</interface>;
-
-const ScreenSaverInfo = Gio.DBusInterfaceInfo.new_for_xml(ScreenSaverIface);
-
-function ScreenSaverProxy() {
-    var self = new Gio.DBusProxy({ g_connection: Gio.DBus.session,
-                                  g_interface_name: ScreenSaverInfo.name,
-                                  g_interface_info: ScreenSaverInfo,
-                                  g_name: 'org.gnome.ScreenSaver',
-                                  g_object_path: '/org/gnome/ScreenSaver',
-                                   g_flags: (Gio.DBusProxyFlags.DO_NOT_AUTO_START |
-                                             Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES) });
-    self.init(null);
-    self.screenSaverActive = false;
-
-    self.connectSignal('ActiveChanged', function(proxy, senderName, [isActive]) {
-        self.screenSaverActive = isActive;
-    });
-    self.connect('notify::g-name-owner', function() {
-        if (self.g_name_owner) {
-            self.GetActiveRemote(function(result, excp) {
-                if (result) {
-                    let [isActive] = result;
-                    self.screenSaverActive = isActive;
-                }
-            });
-        } else
-            self.screenSaverActive = false;
-    });
-
-    return self;
-}
index 9a6f7f67317dfe2e1d815b30c97ffb0c6b7cb0f7..69a94cb8265a5f119c2093b17ca91b84c9c5456f 100644 (file)
@@ -9,7 +9,6 @@ const Params = imports.misc.params;
 const Shell = imports.gi.Shell;
 const Main = imports.ui.main;
 const ShellMountOperation = imports.ui.shellMountOperation;
-const ScreenSaver = imports.misc.screenSaver;
 const GnomeSession = imports.misc.gnomeSession;
 
 const GNOME_SESSION_AUTOMOUNT_INHIBIT = 16;
@@ -92,9 +91,7 @@ const AutomountManager = new Lang.Class({
         if (!haveSystemd())
             this.ckListener = new ConsoleKitManager();
 
-        this._ssProxy = new ScreenSaver.ScreenSaverProxy();
-        this._ssProxy.connectSignal('ActiveChanged',
-                                    Lang.bind(this, this._screenSaverActiveChanged));
+        Main.screenShield.connect('lock-status-changed', Lang.bind(this, this._lockStatusChanged));
 
         this._volumeMonitor = Gio.VolumeMonitor.get();
 
@@ -127,8 +124,8 @@ const AutomountManager = new Lang.Class({
                 }));
     },
 
-    _screenSaverActiveChanged: function(object, senderName, [isActive]) {
-        if (!isActive) {
+    _lockStatusChanged: function(shield, locked) {
+        if (!locked) {
             this._volumeQueue.forEach(Lang.bind(this, function(volume) {
                 this._checkAndMountVolume(volume);
             }));
@@ -166,7 +163,7 @@ const AutomountManager = new Lang.Class({
         if (!this.isSessionActive())
             return;
 
-        if (this._ssProxy.screenSaverActive)
+        if (Main.screenShield.locked)
             return;
 
         global.play_theme_sound(0, 'device-added-media');
@@ -178,7 +175,7 @@ const AutomountManager = new Lang.Class({
         if (!this.isSessionActive())
             return;
 
-        if (this._ssProxy.screenSaverActive)
+        if (Main.screenShield.locked)
             return;
 
         global.play_theme_sound(0, 'device-removed-media');        
@@ -230,7 +227,7 @@ const AutomountManager = new Lang.Class({
             if (!this.isSessionActive())
                 return;
 
-            if (this._ssProxy.screenSaverActive) {
+            if (Main.screenShield.locked) {
                 if (this._volumeQueue.indexOf(volume) == -1)
                     this._volumeQueue.push(volume);
 
index acf6e1f9ffcf9d877b3d76543f173742aaa6acaa..a4da201a37695c174895e7979a902f97e722329b 100644 (file)
@@ -11,7 +11,6 @@ const St = imports.gi.St;
 const DND = imports.ui.dnd;
 const Main = imports.ui.main;
 const Params = imports.misc.params;
-const ScreenSaver = imports.misc.screenSaver;
 const Tweener = imports.ui.tweener;
 
 const HOT_CORNER_ACTIVATION_TIMEOUT = 0.5;
@@ -565,6 +564,7 @@ const Chrome = new Lang.Class({
 
         this._monitors = [];
         this._inOverview = false;
+        this._isLocked = false;
         this._updateRegionIdle = 0;
         this._freezeUpdateCount = 0;
 
@@ -579,16 +579,6 @@ const Chrome = new Lang.Class({
         global.screen.connect('notify::n-workspaces',
                               Lang.bind(this, this._queueUpdateRegions));
 
-        this._screenSaverActive = false;
-        this._screenSaverProxy = new ScreenSaver.ScreenSaverProxy();
-        this._screenSaverProxy.connectSignal('ActiveChanged', Lang.bind(this, function(proxy, senderName, [isActive]) {
-            this._onScreenSaverActiveChanged(isActive);
-        }));
-        this._screenSaverProxy.GetActiveRemote(Lang.bind(this, function(result, err) {
-            if (!err)
-                this._onScreenSaverActiveChanged(result[0]);
-        }));
-
         this._relayout();
     },
 
@@ -597,6 +587,8 @@ const Chrome = new Lang.Class({
                              Lang.bind(this, this._overviewShowing));
         Main.overview.connect('hidden',
                              Lang.bind(this, this._overviewHidden));
+        Main.screenShield.connect('lock-status-changed',
+                                  Lang.bind(this, this._lockStatusChanged));
     },
 
     addActor: function(actor, params) {
@@ -690,16 +682,13 @@ const Chrome = new Lang.Class({
 
     _updateVisibility: function() {
         for (let i = 0; i < this._trackedActors.length; i++) {
+            let actorData = this._trackedActors[i], visible;
             if (!actorData.trackFullscreen)
                 continue;
-
-            let actorData = this._trackedActors[i], visible;
             if (!actorData.isToplevel)
                 continue;
 
-            if (this._screenSaverActive)
-                visible = false;
-            else if (this._inOverview)
+            if (this._inOverview || this._isLocked)
                 visible = true;
             else if (this.findMonitorForActor(actorData.actor).inFullscreen)
                 visible = false;
@@ -721,6 +710,12 @@ const Chrome = new Lang.Class({
         this._queueUpdateRegions();
     },
 
+    _lockStatusChanged: function(shield, locked) {
+        this._isLocked = locked;
+        this._updateVisibility();
+        this._queueUpdateRegions();
+    },
+
     _relayout: function() {
         this._monitors = this._layoutManager.monitors;
         this._primaryMonitor = this._layoutManager.primaryMonitor;
@@ -730,12 +725,6 @@ const Chrome = new Lang.Class({
         this._queueUpdateRegions();
     },
 
-    _onScreenSaverActiveChanged: function(screenSaverActive) {
-        this._screenSaverActive = screenSaverActive;
-        this._updateVisibility();
-        this._queueUpdateRegions();
-    },
-
     _findMonitorForRect: function(x, y, w, h) {
         // First look at what monitor the center of the rectangle is at
         let cx = x + w/2;
index eea4146490770a3f31de0066db02cfdf263dfa6e..ed6f9f79fced6663c1a60a185a7b4cd887640658 100644 (file)
@@ -16,7 +16,6 @@ const GnomeSession = imports.misc.gnomeSession;
 const Main = imports.ui.main;
 const PanelMenu = imports.ui.panelMenu;
 const PopupMenu = imports.ui.popupMenu;
-const ScreenSaver = imports.misc.screenSaver;
 const Util = imports.misc.util;
 
 const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
@@ -451,7 +450,6 @@ const UserMenuButton = new Lang.Class({
         this._accountMgr = Tp.AccountManager.dup();
 
         this._upClient = new UPowerGlib.Client();
-        this._screenSaverProxy = new ScreenSaver.ScreenSaverProxy();
         this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
 
         this._iconBox = new St.Bin();
@@ -769,16 +767,13 @@ const UserMenuButton = new Lang.Class({
 
     _onLockScreenActivate: function() {
         Main.overview.hide();
-        this._screenSaverProxy.LockRemote();
+        Main.screenShield.lock();
     },
 
     _onLoginScreenActivate: function() {
         Main.overview.hide();
-        // Ensure we only move to GDM after the screensaver has activated; in some
-        // OS configurations, the X server may block event processing on VT switch
-        this._screenSaverProxy.SetActiveRemote(true, Lang.bind(this, function() {
-            this._userManager.goto_login_session();
-        }));
+        Main.screenShield.lock();
+        this._userManager.goto_login_session();
     },
 
     _onQuitSessionActivate: function() {
@@ -800,10 +795,8 @@ const UserMenuButton = new Lang.Class({
             this._suspendOrPowerOffItem.state == PopupMenu.PopupAlternatingMenuItemState.DEFAULT) {
             this._session.ShutdownRemote();
         } else {
-            // Ensure we only suspend after locking the screen
-            this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
-                this._upClient.suspend_sync(null);
-            }));
+            Main.screenShield.lock();
+            this._upClient.suspend_sync(null);
         }
     }
 });